#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

#define SListDatatype int

typedef struct SListNode
{
	SListDatatype val;
	struct SListNode* next;
}SListNode;

SListNode* buyNewNode(SListDatatype x);

void SListPrint(SListNode* plist);

void SListPushFront(SListNode** pplist, SListDatatype x);

void SListPushBack(SListNode** pplist, SListDatatype x);

void SListPopFront(SListNode** pplist);

void SListPopBack(SListNode** pplist);

SListNode* SListFind(SListNode* plist, SListDatatype tgt);

void SListDestroy(SListNode** pplist);

void SListPushPosBack(SListNode** pplist, SListNode* pos, SListDatatype x);

void SListPushPosFront(SListNode** pplist, SListNode* pos, SListDatatype x);

void SListPopPosBack(SListNode** pplist, SListNode* pos);

void SListPopPos(SListNode** pplist, SListNode* pos);